package br.senai.sc.util;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
 * Utilizada para edição de imagens.
 * 
 * @author Tiago Wanke Marques &lt;tiago.marques@sc.senai.br&gt;
 */
public final class ImageEditor {

	private ImageEditor() {
	}

	/**
	 * Redimensiona a imagem respeitando as proporções.
	 * 
	 * @see http://rberaldo.com.br/reduzir-imagens-mantendo-a-proporcao/
	 * 
	 * @param fileOriginalImage
	 *            Imagem a ser redimensionada (esta não é alterada).
	 * @param fileNewImage
	 *            Local da imagem redimensionada.
	 * @param newWidth
	 *            Nova largura.
	 * @param newHeight
	 *            Nova Altura
	 * @throws IOException
	 */
	public static void resize(File fileOriginalImage, File fileNewImage,
			float newWidth, float newHeight) throws IOException {

		BufferedImage imagem = ImageIO.read(fileOriginalImage);
		Image thumbs;
		BufferedImage buffer;

		float originalWith = imagem.getWidth();
		float originalHeight = imagem.getHeight();

		float width = newWidth;
		float height = newHeight;

		if ((originalWith > newWidth) || (originalHeight > newHeight)) {

			if (originalHeight > originalWith) {

				width = Math.round((newHeight / originalHeight) * originalWith);
			} else if (originalWith > originalHeight) {

				height = Math.round((newWidth / originalWith) * originalHeight);
			}

			buffer = new BufferedImage((int) width, (int) height,
					BufferedImage.TYPE_INT_RGB);
			thumbs = imagem.getScaledInstance((int) width, (int) height,
					Image.SCALE_DEFAULT);
			buffer.createGraphics().drawImage(thumbs, 0, 0, null);
			ImageIO.write(buffer, AnexoUtils.getExtension(fileNewImage),
					fileNewImage);
			buffer.flush();
		}
	}

}
